myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Lessard" <simon.lessar...@gmail.com>
Subject Re: [TRINIDAD] Skinning in a portlet environment
Date Fri, 27 Jul 2007 13:11:56 GMT
Issue with #3 is not very hard, we already have a RenderingContext that can
be used for that. We could probably hook that code in CoreRenderer or
XhtmlRenderer. The only issue left then would be to not have document, head
and body renderer to execute it. Placing it in FormRenderer only does not
seems right in case your page does not contain a form at all or use a basic
JSF form (extremely unlikely though).

On 7/27/07, Martin Marinschek <martin.marinschek@gmail.com> wrote:
>
> For the discussion on if and how to integrate this into Trinidad - I
> see three cases:
>
> 1) people only want basic skinning, Trinidad uses simple.portlet, and
> emits portlet-standard compliant skinning hooks
>
> 2) people want normal Trinidad skinning, portlet container provides
> CSS file in the head, Trinidad doesn't have to do anything (especially
> not switch to portlet-standard compliant skinning hooks)
>
> 3) people want Trinidad skinning, portlet container does not provide
> the CSS file, Trinidad portlet needs to add the CSS file with
> JavaScript itself. Issue to solve: CSS file needs to be added only
> once.
>
> regards,
>
> Martin
>
> On 7/27/07, Martin Marinschek <martin.marinschek@gmail.com> wrote:
> > Hi Simon, Scott,
> >
> > I've made skinning work now in any container - this is the code that
> > I've used, for other users as a reference. We should carry on the
> > discussion if and how to integrate this into Trinidad itself, though.
> >
> > regards,
> >
> > Martin
> >
> > --------------------
> >
> > use a binding attribute on your tr:form:
> >
> > <tr:form id="helloForm" binding="#{personPage.form}">
> >
> > provide a getter for this form in your backing-bean:
> >
> >     public CoreForm getForm() {
> >         CoreForm coreForm =  new MyCoreForm();
> >         return coreForm;
> >     }
> >
> > write the class MyCoreForm, extending Trinidad's CoreForm - with that,
> > you should be good.
> >
> >     public static class MyCoreForm extends CoreForm {
> >         @Override
> >         public void encodeBegin(FacesContext context) throws IOException
> {
> >
> >             StyleContext styleContext = ((CoreRenderingContext)
> > RenderingContext.getCurrentInstance()).getStyleContext();
> >             String uri =
> > styleContext.getStyleProvider().getStyleSheetURI(styleContext);
> >
> >             String contextUri =
> > context.getExternalContext().getRequestContextPath();
> >             String baseURL = contextUri +
> XhtmlConstants.STYLES_CACHE_DIRECTORY;
> >
> >             String finalUri = context.getExternalContext
> > ().encodeResourceURL(baseURL+uri);
> >
> >             StringBuffer buf = new StringBuffer();
> >
> >             buf.append("<script type=\"text/javascript\">\n" +
> >                     "\n" +
> >                     "//<![CDATA[\n" +
> >                     "\n" +
> >                     "if(document.createStyleSheet) {\n" +
> >                     "\n" +
> >                     "document.createStyleSheet('"+finalUri+"');\n" +
> >                     "\n" +
> >                     "}\n" +
> >                     "\n" +
> >                     "else {\n" +
> >                     "\n" +
> >                     "var styles = \"@import url('"+finalUri+"');\";\n" +
> >                     "\n" +
> >                     "var newSS=document.createElement('link');\n" +
> >                     "\n" +
> >                     "newSS.rel='stylesheet';\n" +
> >                     "\n" +
> >                     "newSS.href='"+finalUri+"';\n" +
> >                     "\n" +
> >
> > "document.getElementsByTagName(\"head\")[0].appendChild(newSS);\n" +
> >                     "\n" +
> >                     "}\n" +
> >                     "\n" +
> >                     "//]]>\n" +
> >                     "\n" +
> >                     "</script>");
> >             context.getResponseWriter().write(buf.toString());
> >
> >             super.encodeBegin(context);
> >         }
> >     }
> >
> > On 7/26/07, Simon Lessard <simon.lessard.3@gmail.com> wrote:
> > > Thus linking Portal-Trinidad users to specific portal vendor(s)... Ok,
> I see
> > > the issue now... bleh...
> > >
> > >
> > > On 7/26/07, Scott O'Bryan < darkarena@gmail.com> wrote:
> > > > Simon, you are correct.  The portal would be able to push a
> parameter to
> > > > Trinidad.  Always in a portal environment the skin is uncompressed
> so
> > > > that is also not an issue.  But currently changing the stylesheet
> > > > provided by the Portal is a modification that needs to be made to
> the
> > > > portal itself.  I think that's where Martin is coming from.  An
> > > > unmodified portal container doesn't look very good when displaying
> faces
> > > > and forcing every portal container to provide a skin that is not
> based
> > > > off a standard is not going to be very successful in the general
> case.
> > > > I totally agree with this, but we're sort of between a rock and a
> hard
> > > > place.  :)
> > > >
> > > >
> > > > Simon Lessard wrote:
> > > > > Not really, I think we detect a specific parameter pushed by the
> > > > > container. So only container supporting skinning would push it,
> > > > > effectively synchronizing all portlet LaF. For other container I
> think
> > > > > we simply use the normal code path... That or I had some serious
> > > > > hallucinations in the past months and imagined all this...
> > > > >
> > > > > On 7/26/07, *Martin Marinschek* <martin.marinschek@gmail.com
> > > > > <mailto:martin.marinschek@gmail.com >> wrote:
> > > > >
> > > > >     Hi Simon,
> > > > >
> > > > >     well, but this would then be portlet container dependent,
> right?
> > > You'd
> > > > >     effectively need to implement trinidad skinning in every
> portlet
> > > > >     container.
> > > > >
> > > > >     regards,
> > > > >
> > > > >     Martin
> > > > >
> > > > >     On 7/26/07, Simon Lessard < simon.lessard.3@gmail.com
> > > > >     <mailto: simon.lessard.3@gmail.com>> wrote:
> > > > >     > Personally, I don't see why the portal should not be able
to
> > > > >     provide all
> > > > >     > selectors.
> > > > >     >
> > > > >     > Aren't we just not compressing the selector names when we
> detect
> > > > >     a portal
> > > > >     > environment or did I miss something? I think that strategy
> > > > >     cannot provides
> > > > >     > the icons though.
> > > > >     >
> > > > >     >
> > > > >     > On 7/26/07, Martin Marinschek <martin.marinschek@gmail.com
> > > > >     <mailto: martin.marinschek@gmail.com>> wrote:
> > > > >     > > Does the portlet container really provide every styleclass
> that
> > > is
> > > > >     > > necessary for Trinidad components to look like they
> normally
> > > look?
> > > > >     > >
> > > > >     > > I'm just thinking that what is currently being done
is not
> > > > >     enough to
> > > > >     > > have the full skinning features available, and that
going
> the
> > > > >     > > direction of adding the CSS dynamically would allow
to do
> so.
> > > > >     > >
> > > > >     > > regards,
> > > > >     > >
> > > > >     > > Martin
> > > > >     > >
> > > > >     > > On 7/26/07, Scott O'Bryan <darkarena@gmail.com
> > > > >     <mailto:darkarena@gmail.com>> wrote:
> > > > >     > > > Hey Martin,
> > > > >     > > >
> > > > >     > > > Does the simple-portlet skin render any better?
 I
> *THINK*
> > > > >     that when
> > > > >     > > > running in a portal environment you always get
the
> > > > >     simple-portlet skin
> > > > >     > > > unless your portal provides one of the necessary
skin
> > > > >     extensions which,
> > > > >     > > > right now, it trinidad proprietary.  Maybe this
is just
> a
> > > > >     case of us
> > > > >     > > > needing to bug-fix the portlet skin.
> > > > >     > > >
> > > > >     > > > That article is interesting, but I think that
Trinidad
> has
> > > > >     attempted to
> > > > >     > > > do the same thing only in a different way.  Instead
of
> using
> > > > >     javascript
> > > > >     > > > to copy in the styles, we actually change the
class
> names
> > > > >     that get
> > > > >     > > > rendered on the client to use the portal styles
where
> > > > >     appropriate.
> > > > >     > > > Still, I'm not sure that this has been tested
> extensively
> > > > >     because before
> > > > >     > > > we started looking at 301, much of Trinidad's
portal
> work
> > > > >     has been done
> > > > >     > > > with a Proof of Concept environment.
> > > > >     > > >
> > > > >     > > > Scott
> > > > >     > > >
> > > > >     > > > Martin Marinschek wrote:
> > > > >     > > > > After playing around for a while and finally
finding
> out
> > > > >     that it was
> > > > >     > > > > as easy as setting:
> > > > >     > > > >
> > > > >     > > > >  <skin-family>simple</skin-family>
> > > > >     > > > >
> > > > >     > > > > in the trinidad-config.xml I got skinning
to run in
> the
> > > > >     portlet
> > > > >     > > > > environment. In the end, I'm not very happy
with what
> I
> > > > >     see, though.
> > > > >     > > > >
> > > > >     > > > > I'm attaching a screenshot - basically, not
much
> change
> > > > >     happens by
> > > > >     > > > > applying skinning - obviously due to the
fact that the
> > > portlet
> > > > >     > > > > containers don't offer many default style-class
hooks.
> > > > >     > > > > Have I been getting this wrong or does it
really look
> like
> > > > >     this?
> > > > >     > > > >
> > > > >     > > > > If I have been doing the right thing, wouldn't
it be
> nice
> > > > >     to have a
> > > > >     > > > > way of adding the stylesheet with javascript
> dynamically
> > > > >     in the body?
> > > > >     > > > >
> > > > >     > > > > Something like this:
> > > > >     > > > >
> > > > >     > > > >
> > > > >     >
> > > > >
> > > http://cse-mjmcl.cse.bris.ac.uk/blog/2005/08/18/1124396539593.html
> > > > >
> > > <http://cse-mjmcl.cse.bris.ac.uk/blog/2005/08/18/1124396539593.html
> > > >
> > > > >     > > > >
> > > > >     > > > > might be in order to have full skinning available,
and
> > > > >     still be
> > > > >     > > > > standards compliant.
> > > > >     > > > >
> > > > >     > > > > I'd implement this in a component, if nobody
has
> better
> > > > >     ideas...
> > > > >     > > > >
> > > > >     > > > > regards,
> > > > >     > > > >
> > > > >     > > > > Martin
> > > > >     > > > >
> > > > >     > > > >
> > > > >     > > > >
> > > > >     > > > >
> > > > >     >
> > > > >
> > >
> ------------------------------------------------------------------------
> > > > >
> > > > >     > > > >
> > > > >     > > >
> > > > >     > > >
> > > > >     > >
> > > > >     > >
> > > > >     > > --
> > > > >     > >
> > > > >     > > http://www.irian.at
> > > > >     > >
> > > > >     > > Your JSF powerhouse -
> > > > >     > > JSF Consulting, Development and
> > > > >     > > Courses in English and German
> > > > >     > >
> > > > >     > > Professional Support for Apache MyFaces
> > > > >     > >
> > > > >     >
> > > > >     >
> > > > >
> > > > >
> > > > >     --
> > > > >
> > > > >     http://www.irian.at
> > > > >
> > > > >     Your JSF powerhouse -
> > > > >     JSF Consulting, Development and
> > > > >     Courses in English and German
> > > > >
> > > > >     Professional Support for Apache MyFaces
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
> > --
> >
> > http://www.irian.at
> >
> > Your JSF powerhouse -
> > JSF Consulting, Development and
> > Courses in English and German
> >
> > Professional Support for Apache MyFaces
> >
>
>
> --
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>

Mime
View raw message