OSDN Git Service

add and implement 'CSSCompile' plugin
authorhylom <hylom@users.sourceforge.jp>
Wed, 7 Sep 2016 17:04:58 +0000 (02:04 +0900)
committerhylom <hylom@users.sourceforge.jp>
Wed, 7 Sep 2016 17:04:58 +0000 (02:04 +0900)
dev/newslash_web/css/main.less [new file with mode: 0644]
dev/newslash_web/lib/Newslash/Plugin/CSSCompile.pm [new file with mode: 0644]
dev/newslash_web/lib/Newslash/Web.pm

diff --git a/dev/newslash_web/css/main.less b/dev/newslash_web/css/main.less
new file mode 100644 (file)
index 0000000..8be3b1a
--- /dev/null
@@ -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 (file)
index 0000000..138555e
--- /dev/null
@@ -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;
index f33c5ec..e0c4c44 100644 (file)
@@ -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;