Thanks Martin, I'll take a look at it!

tisdag 24 maj 2016 skrev Martin Grigorov <mgrigo...@apache.org>:

> Hi,
>
> I checked the code last night and I believe this use case should be covered
> by
>
> https://github.com/l0rdn1kk0n/wicket-bootstrap/blob/a64af20bcd65f365dbd487c7480db441fd6b6489/bootstrap-less/src/main/java/de/agilecoders/wicket/less/LessCacheManager.java#L156
> It uses Less4j's APIs to get all imported resources recursively and
> extracts the latest modification time.
>
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Wed, May 18, 2016 at 3:17 PM, Lars Törner <lars.tor...@gmail.com
> <javascript:;>> wrote:
>
> > Thanks, we'll try this!
> >
> > Cheers
> > Lasse
> >
> > 2016-05-18 13:21 GMT+02:00 Bas Gooren <b...@iswd.nl <javascript:;>>:
> >
> > > Hi all,
> > >
> > > We’ve encountered this issue, too; Simple fix is to touch the less
> file,
> > > even when a secondary file was the only change.
> > >
> > > The root cause is simple: wicket is not aware of any includes in the
> less
> > > file, and as such only looks at the “parent” less file to see if it was
> > > changed. A potential way to fix this is to make it more intelligent,
> > > assuming the less compiler can expose such details (referenced files,
> > > last-modified time of those files).
> > >
> > > Met vriendelijke groet,
> > > Kind regards,
> > >
> > > Bas Gooren
> > >
> > > Op 18 mei 2016 bij 13:06:59, Martin Grigorov (mgrigo...@apache.org
> <javascript:;>)
> > > schreef:
> > >
> > > Hi Lasse,
> > >
> > > I'll take a look in the coming days!
> > >
> > > Martin Grigorov
> > > Wicket Training and Consulting
> > > https://twitter.com/mtgrigorov
> > >
> > > On Wed, May 18, 2016 at 11:43 AM, Lars Törner <lars.tor...@gmail.com
> <javascript:;>>
> > > wrote:
> > >
> > > > Hi Martin!
> > > >
> > > > We have now implemented this solution and we're using bootstrap-less
> -
> > > > thanks for that!
> > > >
> > > > But we have a little problem...
> > > > The browser does not recognize when the css has changed, the cause
> > seems
> > > to
> > > > be that the newly generated css is placed in a file with the same
> name
> > as
> > > > before. The name has a hashsum in the name that is generated from the
> > > > less-file and the less file has not changed.
> > > >
> > > > What happens is:
> > > > A less-variable (put in a separate file) gets a new value.
> > > > This triggers the less compiler to re-generate css
> > > > The name of the file with generated css has the same name as before
> so
> > > the
> > > > browser decides to use its cached version instead.
> > > >
> > > > (I'm not the developer of this issue, but hopefully I got it
> right...)
> > > >
> > > > Any suggestions?
> > > >
> > > > Cheers
> > > > Lasse
> > > >
> > > >
> > > >
> > > > 2016-03-01 13:02 GMT+01:00 Lars Törner <lars.tor...@gmail.com
> <javascript:;>>:
> > > >
> > > > > Thanks for your quick answer Martin! We will look into your
> > suggestions
> > > > > and get back to you if we have more questions!
> > > > >
> > > > > 2016-03-01 11:49 GMT+01:00 Martin Grigorov <mgrigo...@apache.org
> <javascript:;>>:
> > > > >
> > > > >> Hi Lasse,
> > > > >>
> > > > >> I think the easiest would be to save the generated CSS in memory,
> > e.g.
> > > > in
> > > > >> YourApplication.
> > > > >> Once you receive an update from the other system you should just
> > > delete
> > > > >> the
> > > > >> cache (entry). I guess you will have to use read lock when serving
> > the
> > > > >> response and write lock when updating it.
> > > > >> Wicket uses AbstractResource#dataNeedsToBeWritten()
> > > > >> <
> > > > >>
> > > >
> > >
> >
> https://github.com/apache/wicket/blob/ffa34c6bfbd2ccd8340e23ff1601edd3e0e941d6/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java#L433
> > > > >> >
> > > > >> method to decide whether the client/browser has the latest
> version.
> > > I.e.
> > > > >> when the browser makes a request for the CSS you should first
> check
> > > > >> whether
> > > > >> there is a cached entry for this CSS file. If there is no such
> then
> > > > >> generate it, save it in the cache and serve it back. If there is
> > such
> > > > >> cache
> > > > >> entry then let Wicket check its last modification time against the
> > > > request
> > > > >> header value for 'If-Modified-Since'.
> > > > >>
> > > > >> Additionally you may want to pre-build the CSS resources at
> > > application
> > > > >> start time, or even preserve the current build-time solution, so
> it
> > is
> > > > >> faster for the first users of the application before any changes
> in
> > > the
> > > > >> variables.
> > > > >> I've had an issue with similar setup in the past - we were using
> CDN
> > > > >> (Akamai) and their request timed out while waiting for the Less
> > > > >> compilation. For requests from normal browsers this shouldn't be a
> > > > problem
> > > > >> though.
> > > > >>
> > > > >> You may also check Wicket Bootstrap Less
> > > > >> <
> > > > >>
> > > >
> > >
> >
> https://github.com/l0rdn1kk0n/wicket-bootstrap/tree/master/bootstrap-less
> > > > >> >.
> > > > >> It is a module of Wicket-Bootstrap project but could be used
> without
> > > the
> > > > >> other modules.
> > > > >> It provides most of the features you need. You just need to see
> how
> > to
> > > > >> plug
> > > > >> the update of the variables.
> > > > >>
> > > > >> Martin Grigorov
> > > > >> Wicket Training and Consulting
> > > > >> https://twitter.com/mtgrigorov
> > > > >>
> > > > >> On Tue, Mar 1, 2016 at 10:45 AM, Lars Törner <
> lars.tor...@gmail.com <javascript:;>
> > >
> > > > >> wrote:
> > > > >>
> > > > >> > Hi!
> > > > >> >
> > > > >> > We would like to be able to set new colors in our gui at
> runtime,
> > > i.e.
> > > > >> > change the theme.
> > > > >> > We use less on component basis. To day we compile the less files
> > to
> > > > css
> > > > >> at
> > > > >> > buildtime and these becom packacke resources.
> > > > >> >
> > > > >> > Now we would like to change the colors by altering the
> appropriate
> > > > >> > less-variables. We want to set the colors (just values as -
> > > > themeColor =
> > > > >> > #000000) in our legacy application. Our web app lives in another
> > > > >> > servletcontainer than the legacy applicaton, so one apporach is
> to
> > > > fetch
> > > > >> > the new colors by REST (for example check for new colors once a
> > > > minute)
> > > > >> and
> > > > >> > get them as json in our wicket-web-app.
> > > > >> >
> > > > >> > Now we're thinking of using dynamic resources. i.e. do not
> compile
> > > the
> > > > >> > less-files at build-time, instead generate css-files fom the
> less
> > > > files
> > > > >> > (hooking in a less-preprocessor) per component at runtime when
> > > > >> requested.
> > > > >> >
> > > > >> > We don't want to generate the css-resource and send it to the
> > client
> > > > if
> > > > >> > it's already cached in browser and not updated on server.
> > > > >> > We don't want to generate the css if it has already been done
> for
> > > the
> > > > >> > component and new colors hasn't been set, i.e once a dynamic
> > > resource
> > > > is
> > > > >> > generated, a cached version should be given as response for all
> > > > clients
> > > > >> > that request the component.
> > > > >> >
> > > > >> > Now the question is if the right way to do this is by
> > implementing a
> > > > >> > dynamic resource by extending AbstractResource and to cache the
> > css
> > > > >> (output
> > > > >> > a css-file on disk?, cache in application?) when once generated?
> > > > >> >
> > > > >> > Any drawbacks? Performance issues? Is there a better way to do
> it?
> > > > >> >
> > > > >> > Cheers
> > > > >> > Lasse
> > > > >> >
> > > > >>
> > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to