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);
}
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';
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"
}
}
<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">