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 <[email protected]> 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 <[email protected]>:
>
> > 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 <[email protected]>:
> >
> >> 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 <[email protected]>
> >> 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