Put common css in a separate stylesheet
authorMarius Gavrilescu <marius@ieval.ro>
Sun, 19 Apr 2015 18:24:51 +0000 (21:24 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Sun, 19 Apr 2015 18:24:51 +0000 (21:24 +0300)
js/90-themes.js
make_static.PL
tmpl/skel.en

index 0e481761002282633ab60569d9a6ba27f195b9e0..1ff13ae747507fb94eabd89df71159a757e6970b 100644 (file)
@@ -1,5 +1,5 @@
 function set_style(name){
-       $('link[rel~="stylesheet"]').each(e => e.disabled = true);
+       $('link[title]').each(e => e.disabled = true);
        $('link[title="' + name + '"]')[0].disabled = false;
        localStorage.setItem("theme", name);
 }
index 0d8d10b873a5dee5f6db1ae50cb885fe9829fb3b..0c4396036d0fc6c4805a89685ef1b175f7bf1173 100644 (file)
@@ -2,11 +2,11 @@
 use v5.14;
 use warnings;
 
-use CSS::Minifier::XS qw//;
-
+use CSS::Minifier::XS qw/minify/;
 use Digest::SHA qw/sha256_base64/;
 use IO::Compress::Gzip qw/gzip/;
 use File::Slurp qw/read_file write_file edit_file_lines/;
+use List::Util qw/first/;
 
 mkdir 'static';
 mkdir 'static/css';
@@ -17,15 +17,41 @@ sub gzip_file {
        gzip $file => "$file.gz", -Level => 9, Minimal => 1;
 }
 
+sub read_css_into_blocks {
+       my ($file) = @_;
+       my (@blocks, $block);
+       for (read_file $file) {
+               $block .= $_;
+               if (/^}/) {
+                       push @blocks, $block;
+                       $block = '';
+               }
+       }
+       \@blocks
+}
+
 sub make_css {
-       my $common_css;
-       $common_css .= read_file $_ for <css/*.css>;
+       my %css;
+       $css{common} .= read_file $_ for <css/*.css>;
+
+       my (%themes, $rndtheme);
        for (<css/themes/*>) {
-               my ($theme) = m,themes/(.*)\.css,;
-               my $css = read_file $_;
-               $css .= $common_css;
-               write_file "static/css/$theme.css", CSS::Minifier::XS::minify $css;
-               gzip_file "static/css/$theme.css";
+               ($rndtheme) = m,themes/(.*)\.css,;
+               $themes{$rndtheme} = read_css_into_blocks $_;
+       }
+
+       while (grep { scalar @$_ } values %themes) {
+               my %blocks = map { $_ => (shift @{$themes{$_}}) // '' } keys %themes;
+               if (grep { $_ ne $blocks{$rndtheme} } values %blocks) {
+                       $css{$_} .= $blocks{$_} for keys %themes;
+               } else {
+                       $css{common} .= $blocks{$rndtheme};
+               }
+       }
+
+       for my $name (keys %css) {
+               write_file "static/css/$name.css", minify $css{$name};
+               gzip_file "static/css/$name.css"
        }
 }
 
index b28726c11fc377bcd0755972c6466bc7798594c2..57f4e91f2c3e05d63aefe0d912c672dcdc135320 100644 (file)
@@ -3,6 +3,7 @@
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
+<link href="/static/css/common.css" rel="stylesheet" integrity="x">
 <link href="/static/css/cyborg.css" title="cyborg" rel="stylesheet" integrity="x">
 <link href="/static/css/slate.css" title="slate" rel="alternate stylesheet" integrity="x">
 <link href="/static/css/readable.css" title="readable" rel="alternate stylesheet" integrity="x">
This page took 0.013121 seconds and 4 git commands to generate.