Search code examples
perltemplate-toolkit

Template Toolkit browser detection


Is there a way to detect what browser you are using through template toolkit? For example I can achieve what I want to do using jQuery but thought it would be useful to know how to do it in template toolkit if possible?

Jquery

    <script>
    jQuery(window).load(function(){
        if ( (jQuery.browser.msie && jQuery.browser.version < 9.0) )
        {
            jQuery('body').addClass('old-ie');
        }
    });
    </script>

In template toolkit I want to do something like the below but can't see this in the documentation anywhere?

    <body 
    [% IF browser.msie && browser.version < 9.0 %]
    class="old-ie"
    [% ELSE %]
    [% END %]
    >

Solution

  • I'm not aware of a TT plug-in for this, but it's trivial to add a line or two to your back-end application to make the information available to the template. For example, if your app is Catalyst based, you would add something like this to your main program:

    __PACKAGE__->apply_request_class_roles(qw/
        Catalyst::TraitFor::Request::BrowserDetect
    /);
    

    ... and in your 'auto' handler, introduce a line such as (untested):

    $c->stash(browser => $c->req->browser);
    

    ... or just use this is your template:

    [%- SET browser = c.req.browser;
        SET old_ie = 'class="old-ie"'
            IF browser.windows && browser.ie && browser.public_major < 9.0;
    -%]
    

    and then include old_ie wherever it's required in your template.

    See Catalyst::TraitFor::Request::BrowserDetect and HTTP::BrowserDetect for more info and options. I'm sure there are similar plugins/methods for Dancer, Mojolicious etc.