Merge branch 'master' into newmc
authorMarius Gavrilescu <marius@ieval.ro>
Sun, 19 Apr 2015 18:33:50 +0000 (21:33 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Sun, 19 Apr 2015 18:33:50 +0000 (21:33 +0300)
Conflicts:
make_static.PL
tmpl/skel.en

1  2 
js/90-themes.js
make_static.PL
tmpl/skel.en

diff --combined js/90-themes.js
index 9de6b1b87b510dd0e85a63d38d5e9f38bbdfe9dc,1ff13ae747507fb94eabd89df71159a757e6970b..756b15612991212da6c750ff7d7ad00655861ba5
@@@ -1,13 -1,7 +1,13 @@@
  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);
 +      $(function() {
 +              if(name == 'slate' || name == 'cyborg')
 +                      $('.logo').each(e => e.classList.remove('logo-light'));
 +              else
 +                      $('.logo').each(e => e.classList.add('logo-light'));
 +      });
  }
  
  $(function() {
diff --combined make_static.PL
index 44f56fa6012f89f1d0093eb3ab101e0781b5613e,0c4396036d0fc6c4805a89685ef1b175f7bf1173..23c5643d91ddeb063d4b0236890fd38856af593a
@@@ -2,56 -2,56 +2,82 @@@
  use v5.14;
  use warnings;
  
- use CSS::Minifier::XS qw//;
+ use CSS::Minifier::XS qw/minify/;
 +use CSS::SpriteMaker;
  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';
  mkdir 'static/js';
  
 +sub make_sprite {
 +      my $maker = Local::CSS::SpriteMaker->new(
 +              css_class_prefix => 'logo-',
 +              rc_override_classname => sub {
 +                      my ($name) = @_;
 +                      $name =~ s/-light/.logo-light/r;
 +              }
 +      );
 +
 +      $maker->make_sprite(
 +              source_images     => ['logos/'],
 +              target_file       => 'static/logos.png',
 +              add_extra_padding => 10,
 +      );
 +
 +      $maker->print_css(
 +              filename        => 'css/logos.css',
 +              sprite_filename => '/static/logos.png',
 +      );
 +
 +      system 'pngnq-s9', '-s1', 'static/logos.png';
 +      system 'optipng', '-o7', '-zm1-9', 'static/logos-nq8.png';
 +      rename 'static/logos-nq8.png', 'static/logos.png';
 +}
 +
  sub gzip_file {
        my ($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"
        }
  }
  
@@@ -63,14 -63,6 +89,14 @@@ sub make_js 
        gzip_file 'static/js/all.js';
  }
  
 +my $sprite_mtime = -M 'static/logos.png' // 0;
 +for (<logos/*>) {
 +      if (!$sprite_mtime || $sprite_mtime > -M) {
 +              make_sprite;
 +              last
 +      }
 +}
 +
  my $css_mtime = -M 'static/css/slate.css' // 0;
  for (<css/*>, <css/themes/*>) {
        if (!$css_mtime || $css_mtime > -M) {
@@@ -92,25 -84,4 +118,25 @@@ edit_file_lines 
        return unless $file;
        my $hash = sha256_base64 scalar read_file $file;
        s/integrity=".*"/integrity="sha256-$hash="/;
 -} 'tmpl/skel.en'
 +} 'tmpl/skel.en';
 +
 +package
 +  Local::CSS::SpriteMaker;
 +
 +use parent qw/CSS::SpriteMaker/;
 +
 +sub _get_stylesheet_string {
 +      my $self = shift;
 +      my @ret = split "\n", $self->SUPER::_get_stylesheet_string(@_);
 +      shift @ret;
 +      @ret = sort @ret;
 +      unshift @ret, <<EOF;
 +a.logo {
 +      background-image: url("/static/logos.png");
 +      background-repeat: no-repeat;
 +      display: inline-block;
 +      vertical-align: middle;
 +}
 +EOF
 +      join "\n", @ret;
 +}
diff --combined tmpl/skel.en
index 0555da9de45a207268cfeae0c52eea2d504e5739,57f4e91f2c3e05d63aefe0d912c672dcdc135320..e414d16d24aed9a4d60f2af68c0838515264807c
@@@ -3,9 -3,9 +3,10 @@@
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
 -<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/favicon.png" rel="shortcut icon">
+ <link href="/static/css/common.css" rel="stylesheet" integrity="x">
 +<link href="/static/css/cyborg.css" title="cyborg" rel="alternate stylesheet" integrity="x">
 +<link href="/static/css/slate.css" title="slate" rel="stylesheet" integrity="x">
  <link href="/static/css/readable.css" title="readable" rel="alternate stylesheet" integrity="x">
  <script src="/static/js/all.js" type="text/javascript" async defer integrity="x"></script>
  
  <div class="container-fluid">
  <nav role="navigation">
  <ul class="nav nav-pills nav-justified">
 -<li id="nav-home"><a href="/">Gruntmaster 6000</a>
 +<li id="nav-home"><a href="/">Home</a>
  <li id="nav-pb"><a href="/pb/">Problems</a>
  <li id="nav-ct"><a href="/ct/">Contests</a>
  <li id="nav-log"><a href="/log/">Job log</a>
  <li id="nav-us"><a href="/us/">Users</a>
  <li id="nav-account" static="no"><a href="/account">Account</a>
 +<li id="nav-about"><a href="/about">About / Help</a>
  <li id="nav-contribute"><a href="/contribute">Contribute!</a>
  
  </ul>
  </nav>
  
 +<div id="logo"></div>
  <h1 id="title">TITLE</h1>
 -<div id="static" class="alert alert-info" static="yes">This is a static version of Gruntmaster 6000.</div>
 +<div id="static" class="alert alert-info" static="yes">This is a static version of MindCoding, useful when the <a class="alert-link" href="https://mindcoding.ro/">regular version</a> is overloaded.</div>
  
  <div id="result"></div>
  
  <main id="content">Content goes here</main>
  
 +<div id="webchat"><a href="http://webchat.oftc.net/?channels=%23mindcoding" target="_blank">Webchat</a></div>
 +
 +<div id="sponsors">
 +<h3>Official sponsors</h3>
 +<a class="logo logo-emag" href="http://www.fundatiaemag.ro/"></a>
 +<a class="logo logo-easyhost" href="http://ro.easyhost.com/"></a>
 +<a class="logo logo-takeofflabs" href="http://www.takeofflabs.com/"></a>
 +<a class="logo logo-bigstep" href="http://www.bigstep.com/"></a>
 +<a class="logo logo-yardi" href="https://www.facebook.com/YardiRomania"></a>
 +<a class="logo logo-bosch" href="http://www.bosch.com.ro/"></a>
 +<a class="logo logo-endava" href="http://www.endava.com/"></a>
 +</div>
 +
  <footer>
 -Dilmom: Why don't you call your product the Gruntmaster 6000?<br>
 -Dilbert: What kind of product do you see when you imagine a Gruntmaster 6000?<br>
 -Dilmom: Well, it's a stripped-down version of the Gruntmaster 9000, of course. But it's software-upgradeable.
 +<div class="row">
 +<div class="col-md-6 column text-center">
 +<a class="logo logo-hermes" href="http://www.societatea-hermes.ro"></a>
 +</div>
 +
 +<div class="col-md-6 column text-center">
 +<a class="logo logo-facebook" href="http://www.facebook.com/mindcodingcluj"></a>
 +</div>
 +</div>
 +
 +<h3>Partners</h3>
 +<a href="https://www.facebook.com/spyhce?fref=ts" class="logo logo-spyhce"></a>
 +<a href="https://www.facebook.com/telenav?fref=ts" class="logo logo-telenav"></a>
 +<h3>Media Partners</h3>
 +<a href="http://cs.ubbcluj.ro" class="logo logo-csf"></a>
 +<a href="http://www.uniunea.ro" class="logo logo-usr"></a>
 +<a href="http://www.coscj.ro" class="logo logo-cos"></a>
 +<a href="http://www.cluj2015.ro/romana" class="logo logo-eyc"></a>
  </footer>
This page took 0.017135 seconds and 4 git commands to generate.