fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-11-16 10:10 am

[dw-free] Make site schemes siteviews S2 layout have inheritable themes

[commit: http://hg.dwscoalition.org/dw-free/rev/abe1fed9e575]

http://bugs.dwscoalition.org/show_bug.cgi?id=3189

Allow ?style=site on journals to be customized per site skin.

Patch by [personal profile] exor674.

Files modified:
  • bin/upgrading/s2layers/siteviews/layout.s2
  • bin/upgrading/s2layers/siteviews/themes.s2
  • cgi-bin/DW/SiteScheme.pm
  • cgi-bin/LJ/S2.pm
--------------------------------------------------------------------------------
diff -r efb505eb22d0 -r abe1fed9e575 bin/upgrading/s2layers/siteviews/layout.s2
--- a/bin/upgrading/s2layers/siteviews/layout.s2	Tue Nov 16 18:03:46 2010 +0800
+++ b/bin/upgrading/s2layers/siteviews/layout.s2	Tue Nov 16 18:10:42 2010 +0800
@@ -21,7 +21,8 @@ function Page::print() {
     if ( $*SITEVIEWS ) {
         $*SITEVIEWS->start_capture();
         $this->print_head();
-        $this->print_stylesheets();
+        $this->print_default_stylesheet();
+        $this->print_theme_stylesheet();
         $*SITEVIEWS->set_content("head",$*SITEVIEWS->end_capture());
         $*SITEVIEWS->set_content("windowtitle",$this->view_title());
 
@@ -31,6 +32,8 @@ function Page::print() {
     }
 }
 
-function Page::print_stylesheets() {
+function Page::print_default_stylesheet() {
     # Do not actually *print* any stylesheets here, but you can $*SITEVIEWS->need_res(...); here to pull in anything.
 }
+
+function Page::print_theme_stylesheet() {}
diff -r efb505eb22d0 -r abe1fed9e575 bin/upgrading/s2layers/siteviews/themes.s2
--- a/bin/upgrading/s2layers/siteviews/themes.s2	Tue Nov 16 18:03:46 2010 +0800
+++ b/bin/upgrading/s2layers/siteviews/themes.s2	Tue Nov 16 18:10:42 2010 +0800
@@ -2,3 +2,8 @@ layerinfo type = "theme";
 layerinfo type = "theme";
 layerinfo name = "Default Theme";
 layerinfo redist_uniq = "siteviews/default";
+
+function Page::print_theme_stylesheet() {
+    # Do not actually *print* any stylesheets here, but you can $*SITEVIEWS->need_res(...); here to pull in anything.
+}
+
diff -r efb505eb22d0 -r abe1fed9e575 cgi-bin/DW/SiteScheme.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/SiteScheme.pm	Tue Nov 16 18:10:42 2010 +0800
@@ -0,0 +1,109 @@
+#!/usr/bin/perl
+#
+# DW::SiteScheme
+#
+# SiteScheme related functions
+#
+# Authors:
+#      Andrea Nall <anall@andreanall.com>
+#
+# Copyright (c) 2010 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself.  For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+
+=head1 NAME
+
+DW::SiteScheme - SiteScheme related functions
+
+=head1 SYNOPSIS
+
+=cut
+
+package DW::SiteScheme;
+use strict;
+
+my %sitescheme_inheritance = (
+    blueshift => 'common',
+    celerity => 'common',
+    common => 'global',
+    'gradation-horizontal' => 'common',
+    'gradation-vertical' => 'common',
+    lynx => 'common',
+);
+
+my $default_sitescheme = "blueshift";
+
+eval "use DW::SiteScheme::Local;";
+
+# no POD, should only be called from Local module
+# DW::SiteScheme->register_siteschemes( foo => 'bar' );
+sub register_siteschemes {
+    my ( $self, %data ) = @_;
+    %sitescheme_inheritance = (
+        %sitescheme_inheritance,
+        %data
+    );
+}
+
+# no POD, should only be called from Local module
+# DW::SiteScheme->register_siteschemes( 'foo' );
+sub register_default_sitescheme {
+    $default_sitescheme = $_[1];
+}
+
+=head2 C<< DW::SiteScheme->determine_current_sitescheme >>
+
+Determine the siteschehe, using the following in order:
+
+=over
+
+=item bml_use_scheme note
+
+=item usescheme GET argument
+
+=item BMLschemepref cookie
+
+=item Default sitescheme
+
+=item 'global'
+
+=back
+
+=cut
+
+sub determine_current_sitescheme {
+    my $r = DW::Request->get;
+
+    my $rv;
+
+    if ( defined $r ) {
+        $rv = $r->note( 'bml_use_scheme' ) ||
+            $r->get_args->{usescheme} ||
+            $r->cookie( 'BMLschemepref' );
+    }
+    return $rv ||
+        $default_sitescheme ||
+        'global';
+}
+
+=head2 C<< DW::SiteScheme->get_sitescheme_inheritance( $scheme ) >>
+
+Scheme defaults to the current sitescheme.
+
+Returns the inheritance array, with the provided scheme being at the start of the list.
+
+=cut
+
+sub get_sitescheme_inheritance {
+    my ( $self, $scheme ) = @_;
+    $scheme ||= $self->determine_current_sitescheme;
+    my @scheme;
+    push @scheme, $scheme;
+    push @scheme, $scheme while ( $scheme = $sitescheme_inheritance{$scheme} );
+    return @scheme;
+}
+
+1;
\ No newline at end of file
diff -r efb505eb22d0 -r abe1fed9e575 cgi-bin/LJ/S2.pm
--- a/cgi-bin/LJ/S2.pm	Tue Nov 16 18:03:46 2010 +0800
+++ b/cgi-bin/LJ/S2.pm	Tue Nov 16 18:10:42 2010 +0800
@@ -37,6 +37,8 @@ use Apache2::Const qw/ :common /;
 use Apache2::Const qw/ :common /;
 use POSIX ();
 
+use DW::SiteScheme;
+
 # TEMP HACK
 sub get_s2_reader {
     return LJ::get_dbh("s2slave", "slave", "master");
@@ -894,10 +896,17 @@ sub siteviews_style {
     my %style;
 
     my $public = get_public_layers();
+    my $theme = "siteviews/default";
+    foreach my $candidate ( DW::SiteScheme->get_sitescheme_inheritance ) {
+        if ( $public->{"siteviews/$candidate"} ) {
+            $theme = "siteviews/$candidate";
+            last;
+        }
+    }
     %style = (
               core => "core2",
               layout => "siteviews/layout",
-              theme => "siteviews/default",
+              theme => $theme,
     );
 
     # convert the value names to s2layerid
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org