2014-05-28 14:16 GMT+02:00 Caleb James DeLisle <[email protected]>:

>
>
> On 05/28/2014 11:25 AM, Marius Dumitru Florea wrote:
> > On Wed, May 28, 2014 at 12:10 PM, Guillaume "Louis-Marie" Delhumeau
> > <[email protected]> wrote:
> >> 2014-05-28 10:43 GMT+02:00 Marius Dumitru Florea <
> >> [email protected]>:
> >>
> >>> On Tue, May 27, 2014 at 11:47 AM, Guillaume "Louis-Marie" Delhumeau
> >>> <[email protected]> wrote:
> >>>> 2014-05-27 9:56 GMT+02:00 Denis Gervalle <[email protected]>:
> >>>>
> >>>>> Hi Guillaume,
> >>>>>
> >>>>> Maintaining retro-compatibility for theme using LESS code is too
> much.
> >>>>> Maintaining retro compatibility could be simply to support importing
> >>>>> existing color themes in the new theme system made for bootstrap and
> no
> >>>>> more.
> >>>>>
> >>>>
> >>>> Let me show you an example:
> >>>> The Activity Stream has its own CSS, which does:
> >>>>
> >>>> #template('colorThemeInit.vm')
> >>>> ...
> >>>> .activityPage:hover , .activityApplication:hover ,
> .activityUser:hover {
> >>>>   background: $theme.highlightColor;
> >>>> }
> >>>> ...
> >>>>
> >>>> So when my mouse is hovering the AS, its background color change. By
> >>>> default, it's a kind of yellow.
> >>>>
> >>>> Now, if I want to integrate a bootswatch theme, let say 'slate' [1]. I
> >>> just
> >>>> copy the LESS files ([2] and [3]) in my textarea.
> >>>>
> >>>> It looks very good [4], until my mouse comes over the activity
> stream...
> >>>> that becomes yellow! [5] Something needs to be done.
> >>>>
> >>>
> >>> All clear up to here.
> >>>
> >>>> A solution could be to manually fix the colors in the color theme
> editor
> >>>> but it defeats the principle to easily integrate a bootstrap kit
> found on
> >>>> the web...
> >>>>
> >>>
> >>>> That's why I would like to parse the LESS code. With the solution 3,
> >>> which
> >>>> is easy to implement, we have a solution.
> >>>
> >>> So you need to set the value of $theme.highlightColor to a color taken
> >>> from the 'slate' theme (which was taken from bootswatch). I must say I
> >>> didn't understood very well what you mean by parsing the LESS output.
> >>> Can you give more details (for solution 3)?
> >>>
> >>
> >> Ok.
> >>
> >> I have mapped "highlightColor" (color theme variable) to
> >> "@nav-link-hover-bg" (bootstrap variable).
> >>
> >> So, when slat changes @nav-link-hover-bg to gray, I want to be able to
> say
> >> "$theme.highlightColor" is gray too.
> >>
> >> How can I do that?
> >>
> >> 1/ Parsing the LESS file
> >> or
> >> 2/ Parsing the CSS output file
> >>
> >> I am prototyping the method 2.
> >>
> >> Concretly, at the end of my style.less file, I add:
> >>
> >> /* this class is actually useless for the browser */
> >> .colortheme-highlightColor{
> >>   color: @nav-link-hover-bg;
> >> }
> >>
> >>
> >> LESS transforms it to:
> >>
> >> .colortheme-highlightColor{
> >>   color: #eee;
> >> }
> >>
> >> Now, my parser looks at every classes starting by ".colortheme-". The
> >> mapping looks like this:
> >>
> >> .colortheme-NAME_OF_THE_VARIABLE{
> >>   color: VALUE_OF_THE_VARIABLE;
> >> }
> >>
> >
> > All clear.
> >
> >> So my parser is able to say "highlightColor" = "#eee".
> >
> > WDYM by "my parser"? The CSS parser? I've used CSSOMParser a few times
> > in the past, such as here
> >
> https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-xwiki/src/main/java/org/xwiki/rendering/internal/wiki/XWikiWikiModel.java#L125
>
>
> Guillaume ran his explanation by me to verify that he was explaining
> it reasonably well. I thought I'd throw my understanding in to see if
> it helps.
>
> I gather there's a need to update a few velocity variables from CSS,
> this is because all of the old extensions depend on these variables
> and if they're not updated according to the CSS then the old applications
> will look hilarious when used with the new skin.
>
> Even if we hooked into the colortheme editor and trapped the changes
> to the theme to update the old variables, this would not allow us to
> pull in bootstrap themes from around the internet by pasting in the LESS
> code.
>
> Guillaume's solution was to add some special LESS code which assigns
> the desired values to a set of uniquely named classes and then *grep*
> the output CSS for those classes and copy over the values.
>
> Something like:
> word = cssOutput.indexOf(".colortheme-magic-class-21246798237");
> begin = cssOutput.indexOf('{', word);
> end = cssOutput.indexOf('}', begin);
>
> A fairly clever method of making XWiki compatible with arbitrary
> LESS code and arbitrary bootstrap themes and +1 for me.
>
> Guillaume: did I understand this properly?
>

Yes you did, thanks !

Except that I eventually implemented it with a regexp (but it could be
changed to a real CSS parser afterwards...).


> Marius: does my explanation make any sense?
>
> Thanks,
> Caleb
>
>
> >
> > Hope this helps,
> > Marius
> >
> >>
> >> I agree... it looks like a hack. But it is the simplest way I have
> found to
> >> compute the color theme from a LESS file...
> >>
> >>
> >>
> >>>
> >>> Thanks,
> >>> Marius
> >>>
> >>>>
> >>>> I agree it's not perfect, but it could be a migration path until we
> >>> change
> >>>> all the CSS of every applications!
> >>>>
> >>>>
> >>>>
> >>>>> Regarding the customization of Bootstrap, it exists a couple of tools
> >>>>> already. It allows far more than just color customization. Have you
> >>> check
> >>>>> if one of those existing tools could be adapted (and have appropriate
> >>>>> license) ?
> >>>>>
> >>>>
> >>>> I am looking at it. Not sure we could find it (easy to integrate,
> >>>> maintained, compatible with XWiki....).
> >>>>
> >>>> Thanks,
> >>>> Guillaume
> >>>>
> >>>> [1] Slate: http://bootswatch.com/slate/
> >>>> [2] Slate variables.less: http://bootswatch.com/slate/variables.less
> >>>> [3] Slate bootswatch.less:
> http://bootswatch.com/slate/bootswatch.less
> >>>> [4] Results:
> >>>> http://tof.canardpc.com/view/7740a7ee-29f4-454f-99e7-f45ef53d9095.jpg
> >>>> [5] Not good:
> >>>> http://tof.canardpc.com/view/a23e7101-449d-4fed-a922-cf58323220d3.jpg
> >>>>
> >>>>
> >>>>>
> >>>>> Thanks,
> >>>>>
> >>>>>
> >>>>> On Mon, May 26, 2014 at 3:49 PM, Guillaume "Louis-Marie" Delhumeau <
> >>>>> [email protected]> wrote:
> >>>>>
> >>>>>> Hi!
> >>>>>>
> >>>>>> The current color theme editor is designed for colibri, and does not
> >>> look
> >>>>>> like flamingo does. We have several options here:
> >>>>>> - create a new color theme editor, especially for Flamingo
> >>>>>> - modify the current one to detect which skin is currenlty used, and
> >>>>> change
> >>>>>> the preview.
> >>>>>>
> >>>>>> The application will be splited in 2 sections:
> >>>>>> 1/ a live preview where you can set some variables (what we
> currenlty
> >>>>> have)
> >>>>>> 2/ a free textarea where the user can fill LESS code (for example,
> >>> some
> >>>>>> code downloaded on bootswatch).
> >>>>>>
> >>>>>> But a lot of applications already use the color theme as it is, via
> >>> the
> >>>>>> "colorThemeInit.vm" template. So we need a retro-compatibility: a
> >>> color
> >>>>>> theme computed by LESS must be usable with old color themes.
> >>>>>>
> >>>>>> Concretly, we will map the old color theme variables to the
> bootstrap
> >>>>> ones,
> >>>>>> example:
> >>>>>> $theme.notificationSuccessColor = @brand-success
> >>>>>>
> >>>>>> But because of the section 2 (the free textarea), we are not able to
> >>> know
> >>>>>> what will be the final value of a bootstrap variables without
> parsing
> >>> the
> >>>>>> content of the textarea!
> >>>>>>
> >>>>>> What are the options we have:
> >>>>>> 1/ Implementing our own LESS parser/compiler in Java
> >>>>>> 2/ Trying to reuse the official LESS Parser through Rhino in a way
> >>> that
> >>>>> we
> >>>>>> can get the computed variables
> >>>>>> 3/ Do not parse the input but the ouput: parse the CSS code to get
> the
> >>>>>> final values of the variables
> >>>>>>
> >>>>>> I'm for 3.
> >>>>>>
> >>>>>> The idea is to create some CSS classes like this:
> >>>>>> .colortheme-bordercolor{
> >>>>>>   color: @border-color;
> >>>>>> }
> >>>>>>
> >>>>>> which will be converted by LESS to:
> >>>>>> .colortheme-bordercolor{
> >>>>>>   color: #000000;
> >>>>>> }
> >>>>>>
> >>>>>> so we can parse it and know the value of $theme.bordercolor. It is
> >>> quick,
> >>>>>> simple, but it pollutes the output CSS a little.
> >>>>>>
> >>>>>> WDYT?
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Guillaume
> >>>>>> _______________________________________________
> >>>>>> devs mailing list
> >>>>>> [email protected]
> >>>>>> http://lists.xwiki.org/mailman/listinfo/devs
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Denis Gervalle
> >>>>> SOFTEC sa - CEO
> >>>>> _______________________________________________
> >>>>> devs mailing list
> >>>>> [email protected]
> >>>>> http://lists.xwiki.org/mailman/listinfo/devs
> >>>>>
> >>>> _______________________________________________
> >>>> devs mailing list
> >>>> [email protected]
> >>>> http://lists.xwiki.org/mailman/listinfo/devs
> >>> _______________________________________________
> >>> devs mailing list
> >>> [email protected]
> >>> http://lists.xwiki.org/mailman/listinfo/devs
> >>>
> >> _______________________________________________
> >> devs mailing list
> >> [email protected]
> >> http://lists.xwiki.org/mailman/listinfo/devs
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> >
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to