[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jetspeed-user
Subject:    RE: Jespeed Skins Alternatives
From:       "Weaver, Scott" <Sweaver () rippe ! com>
Date:       2003-03-31 20:38:11
[Download RAW message or body]


Hi Kevin,

If you haven't already, check out bug id: 

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18208

It's an update from my original post and I think it addressed a lot of your concerns \
regarding images.  

You have made great points concerning the current complexity of the skin registry.  I \
am all for eliminating the obscurity within the css class naming definitions.  Also, \
I think we should make greater use of the contextual selector abilities within css:

VERY simple example

.TitleStyleClass { default stuff }

(Different or same style sheet)

.my-skin .TitleStyleClass { whatever}

(Also, different or same style sheet)

.another-skin .TitleStyleClass { something else }

Then each portlet's content could be enclosed by :
<div class="$skin.Name">
  <span class="TitleStyleClass">Portlet Title</span>
  
</div>


A very simplistic end page would be

<div class="my-skin">
  <!-- I override all settings within .TitleStyleClass
    - with the values from .my-skin .TitleStyleClass
    - anything not overridden, cascades down from
    - .TitleStyleClass.
  -->
  <span class="TitleStyleClass">Portlet Title</span>
  
</div>

<div class="another-skin">
  <!-- I override all settings within .TitleStyleClass
    - with the values from .another-skin .TitleStyleClass
    - anything not overridden, cascades down from
    - .TitleStyleClass.
  -->
  <span class="TitleStyleClass">Portlet Title</span>  

</div>

Using this approach, you can have multiple skins, each with individual csses assigned \
to a single portlet page.  If we used a standardized directory structure, like you \
suggested, for skins, no entries should need to be made to the registry.  An event \
bigger plus is that you can have, for the most part, HTML page designers whip up \
style sheets left and right with out having worry about them needing to understand \
the subtleties of the skin registry.  Just educate them about the naming convention \
and directory structure and everybody's happy ;)

Backward compatibility is the only thing we would need to address before we could \
move forward.


*===================================*
* Scott T Weaver                    *
* Jakarta Jetspeed Portal Project   *
* weaver@apache.org                 *
*===================================*
  


> -----Original Message-----
> From: Earl Shultz [mailto:shultze@midknightoil.com]
> Sent: Monday, March 31, 2003 2:38 PM
> To: jetspeed-dev@jakarta.apache.org; jetspeed-user@jakarta.apache.org
> Subject: Jespeed Skins Alternatives
> 
> I seldom post but this posting touched home on some development I have
> already addressed.  I see a need to ensure that some aspects of style
> control be carried over or included in future revision.  Specifically let
> me list my major concerns:
> 
> First, Jetspeeds default.css includes a very cryptic list of class
> references for style control.  Most are inherent to the control of the
> Jetspeed appearance but most of the existing classes are very obscure and
> it is not immediately apparent what they control. As a result I have been
> pruning existing classes and establishing a clearer hierarchy.  Below is
> an example snippet however I realize this is completely up to the
> developer for control.  I mention it simply so that you might consider
> establishing clearer naming conventions for Jetspeed specific classes.
> One important note however is that I am establishing individual CSS
> documents for each skin.
> 
> ######  default.css SAMPLE
> 
> .Portal { }
> .Portal-Header {
> background-color: #000000;
> }
> .Portal-Header-Logo {
> text-align: left;
> vertical-align: top;
> width: 100%;
> }
> .Portal-Header-Navbar {
> margin: 0px 0px 0px 0px;
> padding: 0px 0px 0px 0px;
> border: 0px;
> text-align: right;
> }
> .Portal-Header-Navbar-Button {
> border: none;
> text-align: right;
> }
> .Portal-Header-Buttonbar {
> padding: 5px 0px 0px 0px;
> border: none;
> text-align: right;
> 	}
> .Portal-Header-Buttonbar-Button {
> border: 0px;
> text-align: right;
> 	}
> .Portal-Header-Authentication {
> background-color: #87ACD6;
> text-align: right;
> }
> .Portal-Header-Authentication-Field {
> padding: 1px 1px 1px 1px;
> color: #000000;
> font-family: Arial, Verdana, Helvetica;
> font-size: 80%;
> font-weight: 600;
> text-align: right;
> }
> .Portal-Menu { }
> .Portal-Portlet-Titlebar
> {
> padding: 0px 0px 3px 3px;
> border: 1px 1px 1px 1px solid #000000;
> 	background-image: url(../../images/blue-gold/scanline_light.gif);
> 	background-repeat: repeat-x;
> color: #000000;
> font-weight: 900;
> }
> .Portal-Portlet-Titlebar-Actions
> {
> background-color: #CCCC99;
> padding: 2px 3px 1px 3px;
> border: 1px 0px 1px 1px solid #000000;
> }
> .Portal-Portlet { }
> .Portal-Footer {
> background-color: #87ACD6;
> color: #000000;
> font-family: Arial, Verdana, Helvetica;
> font-size: 90%;
> font-weight: 400;
> text-align: center;
> }
> 
> Second, There has been a bit of discussion as to addressing only .gif
> images.  Scott's proposal is far more ideal as it allows any web image
> format.  I support that recommendation completely as jpgs are necessary
> for compressed photo quality images.  I believe actions are a small part
> of image control in a skin.  The ability to control the users complete
> experience through a skin is limitless.  One difference to my
> implementation is that not only do I allow the skin to control the
> appearance of certain aspects of the portal but I have built beneath the
> images directory individual directories for each Skin theme.
> (images/gold-black/default.css or images/blue-gold/default.css).  Inside
> each directory I can have a completely unique library of images so that
> even down to the logo, navigation, action images, etc... I can change the
> complete appearance of the site beyond just background colors, borders,
> etc...
> 
> I have eliminated most references to style within the skins.xreg, instead
> we have established effective style through CSS documents and we refer to
> a library of class references to handle the page presentation from the vm
> or jsp pages.
> 
> ######  Skin.xreg
> 
> <skin-entry name="gold-black" hidden="false">
> <property name="skin-name" value="gold-black" hidden="true"/>
> <property name="title-style-class" value="TitleStyleClass"
> hidden="false"/>
> <property name="highlight-title-style-class"
> value="HighlightTitleStyleClass" hidden="false"/>
> <property name="controller-style-class"
> value="ControllerStyleClass" hidden="false"/>
> <property name="portlet-style-class" value="PortletStyleClass"
> hidden="false"/>
> <property name="content-style-class" value="ContentStyleClass"
> hidden="false"/>
> <property name="tab-style-class" value="TabStyleClass"
> hidden="false"/>
> <property name="tab-title-style-class"
> value="TabTitleStyleClass" hidden="false"/>
> <property name="tab-content-style-class"
> value="TabContentStyleClass" hidden="false"/>
> </skin-entry>
> 
> 
> These CSS classes are then referenced by the associated VM documents such
> as top.vm or top.jsp... An example follows:
> 
> ######  top.vm
> 
> <div>
> #if ($!{data.profile.document.portlets.skin.name} != "null")
> #set ($skinName = "$!{data.profile.document.portlets.skin.name}")
> #else
> #set ($skinName =
> $config.getString("services.PortalToolkit.default.skin"))
> #end
> #if ($data.User.hasLoggedIn())
> <TABLE>
> <TR>
> <TD class="Portal-Header-Logo"><IMG
> SRC="images/$skinName/fnmoc_home_banner_metoc.jpg" /></TD>
> <TD>
> <TABLE class="Portal-Header-Navbar" cellspacing="0"
> cellpadding="0">
> <TR>
> <TD class="Portal-Header-Navbar-Button">
> <!-- CUSTOMIZE HTML BUTTON -->
> <A
> HREF="$link.setAction("controls.Customize")?reset=on&level=top">
> <IMG BORDER="0" ALT="Customize HTML"
> SRC="images/$skinName/edit_html.jpg" />
> </A>
> </TD>
> 
> 
> Likewise the css can be unique for each skin as follows in the
> layouts\html\default.vm:
> 
> ######  default.vm
> 
> <HTML>
> <HEAD>
> <base href="$clink.External" />
> #if ($!{data.profile.document.portlets.skin.name} != "null")
> #set ($skinName = "$!{data.profile.document.portlets.skin.name}")
> #else
> #set ($skinName =
> $config.getString("services.PortalToolkit.default.skin"))
> #end
> <link href="$clink.setURI("css/$skinName/default.css").Absolute"
> type="text/css" rel="stylesheet" />
> #set ($titlePrefix = $config.getString("portalpage.title_prefix"))
> <title>#if ($titlePrefix)$titlePrefix
> #end$!{data.profile.document.portlets.getMetaInfo().title}</title>
> </HEAD>
> 
> 
> I am happy to see that Skins are an issue warranting futher development by
> the Jetspeed developers.  The old addage "Better to Look Good than to Feel
> Good" has a great deal of merit to the public.  People will always favor
> aesthics over functionality when it comes to end users. But Fuctionality
> coupled closely with aesthetics is always destined for a successful
> future.
> 
> If you have any other questions regarding anything I have mentioned please
> feel free to contact me.  Thank you for your consideration.
> 
> V/R,
> 
> 
> Kevin Shultz
> 
> "The difference between 'involvement' and 'commitment' is like an eggs-
> and-ham breakfast:
> the chicken was 'involved' - the pig was 'committed'."
> - unknown
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic