From: hylom Date: Wed, 7 Sep 2016 17:04:58 +0000 (+0900) Subject: add and implement 'CSSCompile' plugin X-Git-Tag: v0.1.0~348 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=289938c3bdc50a822d8bea360e9c59da3d29d2a9;p=newslash%2Fnewslash.git add and implement 'CSSCompile' plugin --- diff --git a/dev/newslash_web/css/main.less b/dev/newslash_web/css/main.less new file mode 100644 index 00000000..8be3b1a1 --- /dev/null +++ b/dev/newslash_web/css/main.less @@ -0,0 +1,11 @@ + +@background: #1a150d; +@color: #1a150d; + +body { + background: @background; + color: @color; + font-size: 94%; +} + + diff --git a/dev/newslash_web/lib/Newslash/Plugin/CSSCompile.pm b/dev/newslash_web/lib/Newslash/Plugin/CSSCompile.pm new file mode 100644 index 00000000..138555e4 --- /dev/null +++ b/dev/newslash_web/lib/Newslash/Plugin/CSSCompile.pm @@ -0,0 +1,73 @@ +package Newslash::Plugin::CSSCompile; +use Mojo::Base 'Mojolicious::Plugin'; +use Mojo::Home; +use File::Spec; + +#use Data::Dumper; +#use Mojo::Log; +#my $log = Mojo::Log->new; + +my $LESSC = '/usr/bin/lessc'; + +sub register { + my ($self, $app, $conf) = @_; + + $self->{source_dir} = $conf->{source_dir} || $app->home->rel_dir('/css'); + $self->{dest_dir} = $conf->{dest_dir} || $app->home->rel_dir('public/css'); + + $self->compile; +} + +sub compile { + my ($self) = @_; + + opendir(my $dh, $self->{source_dir}); + + while(my $fname = readdir $dh) { + # TODO: find subdirectory + if ($fname =~ m/^(.*)\.less$/) { + my $basename = $1; + my $pathname = File::Spec->catfile($self->{source_dir}, $fname); + my $dest = File::Spec->catfile($self->{dest_dir}, $basename . '.css'); + + my $less = $self->less_compile_file($pathname); + $self->store($less, $dest); + } elsif ($fname =~ m/^(.*)\.css$/) { + my $basename = $1; + my $pathname = File::Spec->catfile($self->{source_dir}, $fname); + my $dest = File::Spec->catfile($self->{dest_dir}, $basename . '.css'); + + my $fh = FileHandle->new; + if ($fh->open($pathname, "r")) { + my $css = do { local $/; <$fh> }; + $fh->close; + $self->store($css, $dest); + } + } + } +} + +sub store { + my ($self, $contents, $dest) = @_; + my $fh = FileHandle->new; + if ($fh->open($dest, "w")) { + $fh->print($contents); + $fh->close; + return 1; + } + return 0; +} + +sub less_compile_file { + my ($self, $pathname) = @_; + my $fh = FileHandle->new; + + if ($fh->open("$LESSC $pathname 2>/dev/null |")) { + my $result = do { local $/; <$fh> }; + return $result; + } + return undef; +} + + +1; diff --git a/dev/newslash_web/lib/Newslash/Web.pm b/dev/newslash_web/lib/Newslash/Web.pm index f33c5ec6..e0c4c448 100644 --- a/dev/newslash_web/lib/Newslash/Web.pm +++ b/dev/newslash_web/lib/Newslash/Web.pm @@ -19,6 +19,9 @@ sub startup { # use Template::Toolkit 2 render $app->plugin('Newslash::Plugin::TT2Renderer'); + # compile CSS + $app->plugin('Newslash::Plugin::CSSCompile'); + # Router my $r = $app->routes;