| # Copyright (C) all contributors <meta@public-inbox.org> |
| # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> |
| |
| # Self-updating module containing a sample CSS for client-side |
| # customization by users of public-inbox. Used by Makefile.PL |
| package PublicInbox::UserContent; |
| use v5.12; |
| use autodie qw(close open seek); |
| |
| # this sub is updated automatically: |
| sub CSS () { |
| <<'_' |
| /* |
| * CC0-1.0 <https://creativecommons.org/publicdomain/zero/1.0/legalcode> |
| * Dark color scheme using 216 web-safe colors, inspired |
| * somewhat by the default color scheme in mutt. |
| * It reduces eyestrain for me, and energy usage for all: |
| * https://en.wikipedia.org/wiki/Light-on-dark_color_scheme |
| */ |
| * { font-size: 100% !important; |
| font-family: monospace !important; |
| background:#000 !important; |
| color:#ccc !important } |
| pre { white-space: pre-wrap !important } |
| |
| /* |
| * Underlined links add visual noise which make them hard-to-read. |
| * Use colors to make them stand out, instead. |
| */ |
| a:link { color:#69f !important; |
| text-decoration:none !important } |
| a:visited { color:#96f !important } |
| |
| /* quoted text in emails gets a different color */ |
| *.q { color:#09f !important } |
| |
| /* |
| * these may be used with cgit <https://git.zx2c4.com/cgit/>, too. |
| * (cgit uses <div>, public-inbox uses <span>) |
| */ |
| *.add { color:#0ff !important } /* diff post-image lines */ |
| *.del { color:#f0f !important } /* diff pre-image lines */ |
| *.head { color:#fff !important } /* diff header (metainformation) */ |
| *.hunk { color:#c93 !important } /* diff hunk-header */ |
| |
| /* |
| * highlight 3.x colors (tested 3.18) for displaying blobs. |
| * This doesn't use most of the colors available, as I find too |
| * many colors overwhelming, so the default is commented out. |
| */ |
| .hl.num { color:#f30 !important } /* number */ |
| .hl.esc { color:#f0f !important } /* escape character */ |
| .hl.str { color:#f30 !important } /* string */ |
| .hl.ppc { color:#f0f !important } /* preprocessor */ |
| .hl.pps { color:#f30 !important } /* preprocessor string */ |
| .hl.slc { color:#09f !important } /* single-line comment */ |
| .hl.com { color:#09f !important } /* multi-line comment */ |
| /* .hl.opt { color:#ccc !important } */ /* operator */ |
| /* .hl.ipl { color:#ccc !important } */ /* interpolation */ |
| |
| /* keyword groups kw[a-z] */ |
| .hl.kwa { color:#ff0 !important } |
| .hl.kwb { color:#0f0 !important } |
| .hl.kwc { color:#ff0 !important } |
| /* .hl.kwd { color:#ccc !important } */ |
| |
| /* line-number (unused by public-inbox) */ |
| /* .hl.lin { color:#ccc !important } */ |
| _ |
| } |
| # end of auto-updated sub |
| |
| # return a sample CSS |
| sub sample ($) { |
| my ($ctx) = @_; |
| my $url_prefix = $ctx->{ibx}->base_url($ctx->{env}); |
| my $css = <<""; |
| /* |
| * Firefox users: this goes in \$PROFILE_FOLDER/chrome/userContent.css |
| * where \$PROFILE_FOLDER is platform-specific |
| * |
| * cf. http://kb.mozillazine.org/UserContent.css |
| * http://kb.mozillazine.org/Profile_folder_-_Firefox |
| * |
| * Users of dillo can remove the entire lines with "moz-only" |
| * in them and place the resulting file in ~/.dillo/style.css |
| */ |
| \@-moz-document url-prefix($url_prefix) { /* moz-only */ |
| |
| $css .= CSS . "\n} /* moz-only */\n"; |
| wantarray ? ($css, (stat(__FILE__))[9]) : $css; |
| } |
| |
| # Auto-update this file based on the contents of a CSS file: |
| # usage: perl -I lib __FILE__ contrib/css/216dark.css |
| # (See Makefile.PL) |
| if (scalar(@ARGV) == 1 && -r __FILE__) { |
| require PublicInbox::IO; |
| open my $ro, '<', $ARGV[0]; |
| my $css = PublicInbox::IO::read_all($ro); |
| |
| # indent one level: |
| $css =~ s/^([ \t]*\S)/\t$1/smg; |
| |
| # "!important" overrides whatever the BOFH sets: |
| $css =~ s/;/ !important;/sg; |
| $css =~ s/(\w) \}/$1 !important }/msg; |
| |
| open my $rw, '+<', __FILE__; |
| my $out = PublicInbox::IO::read_all($rw); |
| $css =~ s/; /;\n\t\t/g; |
| $out =~ s/^sub CSS.*^_\n\}/sub CSS () {\n\t<<'_'\n${css}_\n}/sm; |
| seek $rw, 0, 0; |
| print $rw $out; |
| close $rw; |
| } |
| |
| 1; |