kunzite (kunzite1) wrote in s2layers,
kunzite
kunzite1
s2layers

[user/theme] - [smoothsailing] - [bi-level tags in sidebar]

in response to simons_flower's s2smoothsailing post.
this code is a quick'n'dirty conversion of murklinstest's s2flexisquares bi-level tags in sidebar.
the following set commands should be added to your user layer and replace any that are currently in there.
set layout_sidebox_profile_visibility     = "1";
set layout_sidebox_latestmonth_visibility = "2";
set layout_sidebox_links_visibility       = "3";
set layout_sidebox_summary_visibility     = "4";
set layout_sidebox_multisearch_visibility = "5";
set layout_sidebox_freetext_2_visibility  = "6";
set layout_sidebox_tags_visibility        = "hide";
the following function overrides should be placed into a theme layer. if you are using one of the system-provided theme layers, you'll need to move those set commands for the colors into your user layer, create a new theme layer, place this code into it, and attach the new theme layer to your style.
function Page::print_custom_head()
{

    """
    <style type="text/css">

    /* List Alignment */
    /* Styles to ensure that the tag list is correctly aligned beneath the sidebox title */
    li.tagBox  {padding-left: 0;    margin-left: 0; list-style: none;}
    ul.tagList {padding-left: 0;    margin-left: 0; list-style: none;}
    li.tagItem {padding-left: 15px;                 list-style: none;}
    
    /* Vertical Scroll */
    /* Need to shrink the list width to prevent horizontal scrollbar in Firefox. */
    /* Note this won't prevent it if your tags are super long, it will only */
    /* prevent it from displaying unnecessarily. */
    ul.tagList {width: 90%;}

    </style>
    """;
}

function Page::lay_print_sidebar_freetextbox_2() {

#####   Config   #####

    # Specify your delimiter!  One char only -- extra chars get truncated.
    # Making the delimiter an empty string will result in an un-tiered list, 
    # which may be what you prefer, but this code is serious overkill for 
    # that purpose.
    var string delimiter = ":";

    # Specify the title of your tag box!
    var string tag_title = "Tags";

##### End Config #####

    var Page p = get_page();
    var string list = "";
    
    # mt:20050627
    # Replaced erroneous return code with if statement (otherwise
    # entire sidebar not printed at all if no visible tags!).
    if (size $p->visible_tag_list() > 0) 
    { 
        # mt:20050624
        # Can't use delimiter longer than one char, so truncate if necessary.
        if ($delimiter->length() > 1)    
        {
            $delimiter = $delimiter->substr(0, 1);
        }

        var bool list_started = false;
        var string list_item = "";
        var string[] prev_tags = ["", ""];

        # mt:20050624: Start the list.
        $list = """<ul class="tagList">"""; 
        
        foreach var TagDetail t ($p->visible_tag_list()) 
        {        
            var string[] tags;
             
            if ($t.name) 
            {  
                # mt:20050624
                # Split tags into a 1- or 2-element array on delimiter. Oh god, my
                # kingdom for a function.  Adapted from lj-user rane500's explode 
                # function to only care about first instance of the delimiter.
                var int array_counter = 0;
                var string buffer = "";
                var bool found_delimiter = false;
                foreach var string char ($t.name) 
                {
                    if (($found_delimiter == false) and ($char == $delimiter))
                    {
                        $found_delimiter = true;
                        $tags[$array_counter] = $buffer;
                        $array_counter = $array_counter + 1;
                        $buffer = "";
                    }
                    else 
                    {
                        $buffer = $buffer + $char;
                    } 
                }  
                $tags[$array_counter] = $buffer;
                
                # mt:20050624: Now examine the tags array to determine how to display the tag.
                if (size $tags == 1)
                {
                    # mt:20050624: This tag has no subtag.
        
                    if ($list_started)
                    {
                        # mt:20050624: Previous tag had a subtag, so must close its outstanding list. 
                        $list = $list + """</ul>""";
                        $list_started = false;
                    }
                    if ($prev_tags[0] != "")
                    {
                        # mt:20050624: This is not the very first tag in the list, so close off previous tag.
                        $list = $list + """</li>""";
                    }
                    # mt:20050624: Now add the new tag.
                    $list = $list + """<li class="tagItem"><a href="$t.url">$tags[0]</a>""";
                }
                else
                {   
                    # mt:20050624: This tag has a subtag.
        
                    $list_item = """<li class="tagItem"><a href="$t.url">$tags[1]</a></li>""";
                   
                    if (($tags[0] == $prev_tags[0]) and ($list_started))
                    {
                        # mt:20050624
                        # This tag fits under the previous tag's tier, and it is not the first item in that tier.
                        $list = $list + $list_item;
                    }
                    elseif (($tags[0] == $prev_tags[0]) and ($list_started == false))
                    {
                        # mt:20050624
                        # This tag fits under the previous tag's tier, and it is the very first item in that tier.
                        $list = $list + """<ul class="tagList">""" + $list_item;
                        $list_started = true;
                    }
                    elseif (($tags[0] != $prev_tags[0]) and ($list_started))
                    {
                        # mt:20050624: This tag initializes a new tier and must also close off the previous tag's list.
                        # $list_started retains its true state.
                        $list = $list + """</ul></li><li class="tagItem">$tags[0]<ul class="tagList">""" + $list_item;
                    }
                    elseif (($tags[0] != $prev_tags[0]) and ($list_started == false))
                    {
                        # mt:20050624: This tag initializes a new tier but does not have to close off a list.
                        
                        if ($prev_tags[0] != "")
                        {
                            # mt:20050624: This is not the very first tag in the list, so close off previous tag.
                            $list = $list + """</li>""";
                        }
                        
                        # mt:20050624: Now add the new tag.
                        $list = $list + """<li class="tagItem">$tags[0]<ul class="tagList">""" + $list_item;
                        $list_started = true;
                    }
                }       
                $prev_tags = $tags;           
            }        
            # mt:20050623: Next tag in the list!
        } 
    
        # mt:20050624: Close any outstanding lists.
        if ($list_started)
    	{
            $list = $list + """</ul>""";
        }	   
    	$list = $list + """</li></ul>""";
	   
        # mt:20050625: Enclose the entire list in an li tag as required by the layout.
#        $list = """<li class="tagBox">""" + $list + """</li>""";

        # mt:20050623: Add styling to box title.
#        $tag_title = """<li class="sbartitle">$tag_title</li>""";
    }

##### Specify Box Order #####
 
    # mt:20050627
    # Okay, now that's done, just print out all your sidebar boxes in the order you 
    # want, including a call for this one -- print_sidebar_box($tag_title, $list) --
    # nested within an if statement to prevent tags box from printing in the event 
    # of no visible tags.
#    print_userpic();
#    print_sidebar_blurb();  
#    if ($list != ""){print_sidebar_box($tag_title, $list);}
#    print_sidebar_linklist();
#    print_sidebar_calendar();

#####   End Box Order   #####

  if ($list != ""){
    $this->lay_print_sidebox_top($tag_title);
    print $list;
    $this->lay_print_sidebox_bottom();
  }
}
Tags: class page, function lay_print_sidebar_freetextbox_2, function print_custom_head, layout smoothsailing
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 15 comments