| | <?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); |
| | } |
| | } |
| |
|