| <?php |
|
|
| namespace Kanboard\Console; |
|
|
| use MatthiasMullie\Minify; |
| use Symfony\Component\Console\Input\InputInterface; |
| use Symfony\Component\Console\Output\OutputInterface; |
|
|
| $path = __DIR__ . '/../../libs'; |
| require_once $path . '/minify/src/Minify.php'; |
| require_once $path . '/minify/src/CSS.php'; |
| require_once $path . '/minify/src/JS.php'; |
| require_once $path . '/minify/src/Exception.php'; |
| require_once $path . '/minify/src/Exceptions/BasicException.php'; |
| require_once $path . '/minify/src/Exceptions/FileImportException.php'; |
| require_once $path . '/minify/src/Exceptions/IOException.php'; |
| require_once $path . '/path-converter/src/ConverterInterface.php'; |
| require_once $path . '/path-converter/src/Converter.php'; |
|
|
| |
| |
| |
| |
| |
| |
| class CssCommand extends BaseCommand |
| { |
| const CSS_SRC_PATH = 'assets/css/src/'; |
| const CSS_VENDOR_PATH = 'assets/vendor/'; |
| const CSS_DIST_PATH = 'assets/css/'; |
|
|
| private $appFiles = [ |
| 'base.css', |
| 'links.css', |
| 'titles.css', |
| 'table.css', |
| 'table_drag_and_drop.css', |
| 'table_list.css', |
| 'form.css', |
| 'input_addon.css', |
| 'icon.css', |
| 'alert.css', |
| 'button.css', |
| 'tooltip.css', |
| 'dropdown.css', |
| 'accordion.css', |
| 'select_dropdown.css', |
| 'suggest_menu.css', |
| 'modal.css', |
| 'pagination.css', |
| 'header.css', |
| 'logo.css', |
| 'page_header.css', |
| 'sidebar.css', |
| 'avatar.css', |
| 'file_upload.css', |
| 'thumbnails.css', |
| 'color_picker.css', |
| 'filter_box.css', |
| 'project.css', |
| 'views.css', |
| 'dashboard.css', |
| 'board.css', |
| 'task_board.css', |
| 'task_icons.css', |
| 'task_category.css', |
| 'task_date.css', |
| 'task_tags.css', |
| 'task_summary.css', |
| 'task_form.css', |
| 'comment.css', |
| 'subtasks.css', |
| 'task_list.css', |
| 'task_links.css', |
| 'text_editor.css', |
| 'markdown.css', |
| 'panel.css', |
| 'activity_stream.css', |
| 'user_mention.css', |
| 'slideshow.css', |
| 'list_items.css', |
| 'bulk_change.css', |
| ]; |
|
|
| private $printFiles = [ |
| 'print.css', |
| ]; |
|
|
| private $vendorFiles = [ |
| self::CSS_VENDOR_PATH.'jquery-ui/jquery-ui.min.css', |
| self::CSS_VENDOR_PATH.'jqueryui-timepicker-addon/jquery-ui-timepicker-addon.min.css', |
| self::CSS_VENDOR_PATH.'select2/css/select2.min.css', |
| self::CSS_VENDOR_PATH.'font-awesome/css/font-awesome.min.css', |
| self::CSS_VENDOR_PATH.'c3/c3.min.css', |
| ]; |
|
|
| protected function configure() |
| { |
| $this |
| ->setName('css') |
| ->setDescription('Minify CSS files') |
| ; |
| } |
|
|
| protected function execute(InputInterface $input, OutputInterface $output): int |
| { |
| $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'light.css'], $this->appFiles), 'light.min.css'); |
| $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'dark.css'], $this->appFiles), 'dark.min.css'); |
| $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'auto.css'], $this->appFiles), 'auto.min.css'); |
| $this->minifyFiles(self::CSS_SRC_PATH, $this->printFiles, 'print.min.css'); |
|
|
| $vendorBundle = concat_files($this->vendorFiles); |
| file_put_contents('assets/css/vendor.min.css', $vendorBundle); |
| return 0; |
| } |
|
|
| private function minifyFiles($folder, array $files, $destination) |
| { |
| $minifier = new Minify\CSS(); |
|
|
| foreach ($files as $file) { |
| $filename = $folder.$file; |
| if (! file_exists($filename)) { |
| die("$filename not found\n"); |
| } |
| $minifier->add($filename); |
| } |
|
|
| $minifier->minify(self::CSS_DIST_PATH . $destination); |
| } |
| } |
|
|