From: Marius Gavrilescu Date: Tue, 4 Aug 2015 13:04:40 +0000 (+0300) Subject: Merge branch 'master' into newmc X-Git-Url: http://git.ieval.ro/?a=commitdiff_plain;ds=sidebyside;h=c13e110a3f07e2aef0892f64207f20dcd01ebdd6;hp=-c;p=plack-app-gruntmaster.git Merge branch 'master' into newmc --- c13e110a3f07e2aef0892f64207f20dcd01ebdd6 diff --combined js/90-mobilenav.js index 9efe8fc,bd47c8f..981c843 --- a/js/90-mobilenav.js +++ b/js/90-mobilenav.js @@@ -1,6 -1,6 +1,6 @@@ $(function(){ - const nav = $('nav')[0]; + const nav = q('nav'); nav.classList.add('hidden-xs'); - $('#title')[0].insertAdjacentHTML('beforebegin', '
Tap title to toggle menu
'); + q('#title').insertAdjacentHTML('beforebegin', '
Tap title to toggle menu
'); - $('#title').on('click', () => nav.classList.toggle('hidden-xs')); + $('#title,#logo').on('click', () => nav.classList.toggle('hidden-xs')); }); diff --combined js/90-nav.js index 746ccd7,36aec02..c6b776e --- a/js/90-nav.js +++ b/js/90-nav.js @@@ -6,12 -6,11 +6,12 @@@ const NAVS = us: /^\/us\//, account: /^\/account$/, contribute: /^\/contribute$/, + about: /^\/about$/, }; $(function(){ const path = location.pathname; for (const nav in NAVS) if(path.match(NAVS[nav])) - $('#nav-' + nav)[0].classList.add('active'); + q('#nav-' + nav).classList.add('active'); }); diff --combined js/90-themes.js index 6a4c680,a94d130..50834da --- a/js/90-themes.js +++ b/js/90-themes.js @@@ -3,15 -3,8 +3,14 @@@ function set_style(name, trans) document.body.classList.add('transition-color'); setTimeout(() => document.body.classList.remove('transition-color'), 1000); } - $('link[title]').each(e => e.disabled = true); - $('link[title="' + name + '"]')[0].disabled = false; + q('html').className = name; localStorage.setItem("theme", name); + $(function() { + if(name == 'slate' || name == 'cyborg') + $('img').each(e => e.setAttribute('src', e.getAttribute('src').replace('logos/light', 'logos/dark'))); + else + $('img').each(e => e.setAttribute('src', e.getAttribute('src').replace('logos/dark', 'logos/light'))); + }); } $(function() { @@@ -19,7 -12,7 +18,7 @@@ '
  • Black' + '
  • Grey' + '
  • White'; - const sidebar = $('#sidebar')[0]; + const sidebar = q('#sidebar'); sidebar.insertBefore(m(theme_ul), sidebar.firstChild); $('#themes a').on('click', e => set_style(e.target.dataset.theme, true)); }); diff --combined make_static.PL index 06c9eee,f599a56..1e338ad --- a/make_static.PL +++ b/make_static.PL @@@ -6,14 -6,12 +6,14 @@@ 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 SVG::SpriteMaker; use File::Which; use List::Util qw/first/; mkdir 'static'; mkdir 'static/css'; mkdir 'static/js'; +mkdir 'static/logos'; sub gzip_file { my ($file) = @_; @@@ -28,25 -26,6 +28,25 @@@ sub write_gzfile gzip_file $file } +sub sprite_name { + my ($name) = $_[0] =~ m,/(.*)\.svg,; + "logo-$name" +} + +sub make_logos { + my @logos = ; + my $logos = make_sprite \&sprite_name, @logos; + my @logos_light; + for () { + my $light = s/logos/logos-light/r; + push @logos_light, -f $light ? $light : $_; + } + my $logos_light = make_sprite \&sprite_name, @logos_light; + + write_gzfile 'static/logos/dark.svg', $logos->render; + write_gzfile 'static/logos/light.svg', $logos_light->render; +} + sub read_css_into_blocks { my ($file) = @_; my (@blocks, $block); @@@ -60,26 -39,43 +60,43 @@@ \@blocks } -my $default_theme = 'cyborg'; ++my $default_theme = 'slate'; + + sub theme_prefix { + my ($theme, $decl, $default) = @_; + return $decl if $theme eq $default_theme || !$decl; + return '' if $decl eq $default; + + $default =~ s/[^{]*{\n//; + $default =~ s/\n}[^}]*//; + $decl =~ s/^$_$//m for split "\n", $default; + $decl =~ s/\n+/\n/g; + + my $prefix = "html.$theme"; + my ($first_line) = $decl =~ /([^{]*){/; + $first_line =~ s/(,\s+)/$1 $prefix /g; + $first_line = "$prefix $first_line"; + $decl =~ s/([^{]*){/$first_line\{/; + $decl + } + sub make_css { - my %css; - $css{common} .= read_file $_ for ; + my $css = join '', map { read_file $_ } ; - my (%themes, $rndtheme); + my (%themes); for () { - ($rndtheme) = m,themes/(.*)\.css,; - $themes{$rndtheme} = read_css_into_blocks $_; + my ($theme) = m,themes/(.*)\.css,; + $themes{$theme} = read_css_into_blocks $_; } + my @themes = sort grep { $_ ne $default_theme } keys %themes; 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}; - } + $css .= $blocks{$default_theme}; + $css .= theme_prefix $_, $blocks{$_}, $blocks{$default_theme} for @themes } - write_gzfile "static/css/$_.css", minify $css{$_} for keys %css + write_gzfile "static/css/all.css", minify $css } sub make_js { @@@ -89,15 -85,7 +106,15 @@@ system 'cp', '-rp', 'js', 'static/'; } +my $sprite_mtime = -M 'static/logos/dark.svg' // 0; +for (, ) { + if (!$sprite_mtime || $sprite_mtime > -M) { + make_logos; + last + } +} + - my $css_mtime = -M 'static/css/slate.css' // 0; + my $css_mtime = -M 'static/css/all.css' // 0; for (, ) { if (!$css_mtime || $css_mtime > -M) { make_css; @@@ -118,4 -106,4 +135,4 @@@ 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'; diff --combined tmpl/skel.en index cb7156a,32eb1f7..6406c51 --- a/tmpl/skel.en +++ b/tmpl/skel.en @@@ -3,51 -3,33 +3,48 @@@ + - - - - +
    + +

    TITLE

    -
    This is a static version of Gruntmaster 6000.
    +
    This is a static version of MindCoding, useful when the regular version is overloaded.
    Content goes here
    + + +
    +
    +